package com.mimc.service;

import com.jfinal.aop.Inject;
import com.mimc.common.constant.CacheConstants;
import com.mimc.common.constant.UserConstants;
import com.mimc.common.utils.StringUtils;
import com.mimc.core.model.SysConfig;
import com.mimc.core.service.SysConfigService;
import io.jboot.aop.annotation.Bean;
import io.jboot.db.model.Columns;
import io.jboot.utils.CacheUtil;
import lombok.extern.slf4j.Slf4j;

import javax.annotation.PostConstruct;
import java.util.List;

@Bean
@Slf4j
public class ShSysConfigService {
    @Inject
    private SysConfigService sysConfigService;

    @PostConstruct
    public void init()
    {
        log.info("加载配置--------------------");
        loadingConfigCache();
    }

    /**
     * 加载参数缓存数据
     */
    public void loadingConfigCache()
    {
        List<SysConfig> configsList = sysConfigService.findAll();
        for (SysConfig config : configsList)
        {
            CacheUtil.put(CacheConstants.SYS_CONFIG_KEY,config.getConfigKey(),config.getConfigValue());
        }
    }
    /**
     * 清空参数缓存数据
     */
    public void clearConfigCache()
    {
        CacheUtil.removeAll(CacheConstants.SYS_CONFIG_KEY);
    }

    /**
     * 重置参数缓存数据
     */
    public void resetConfigCache()
    {
        clearConfigCache();
        loadingConfigCache();
    }
    /**
     * 校验参数键名是否唯一
     * @param config 参数配置信息
     * @return 结果
     */
    public boolean checkConfigKeyUnique(SysConfig config)
    {
        Integer configId = StringUtils.isNull(config.getConfigId()) ? -1 : config.getConfigId();
        SysConfig info = sysConfigService.findFirstByColumns(Columns.create("config_key",config.getConfigKey()));
        if (StringUtils.isNotNull(info) && info.getConfigId() != configId)
        {
            return UserConstants.NOT_UNIQUE;
        }
        return UserConstants.UNIQUE;
    }
    /**
     * 新增参数配置
     *
     * @param config 参数配置信息
     * @return 结果
     */
    public Integer insertConfig(SysConfig config)
    {
        Integer configId = (Integer) sysConfigService.save(config);
        if (configId!=null&&configId>0)
        {
            CacheUtil.put(CacheConstants.SYS_CONFIG_KEY,config.getConfigKey(),config.getConfigValue());
        }
        return configId;
    }
    /**
     * 修改参数配置
     *
     * @param config 参数配置信息
     * @return 结果
     */
    public boolean updateConfig(SysConfig config)
    {
        SysConfig temp = sysConfigService.findById(config.getConfigId());
        if (!StringUtils.equals(temp.getConfigKey(), config.getConfigKey()))
        {
            CacheUtil.remove(CacheConstants.SYS_CONFIG_KEY,config.getConfigKey());
        }

        boolean row = sysConfigService.update(config);
        if (row)
        {
            CacheUtil.put(CacheConstants.SYS_CONFIG_KEY,config.getConfigKey(),config.getConfigValue());
        }
        return row;
    }

    public boolean deleteConfig(SysConfig config){
        if(sysConfigService.delete(config)){
            CacheUtil.remove(CacheConstants.SYS_CONFIG_KEY,config.getConfigKey());
            return true;
        }else{
            return false;
        }
    }
    public String getConfigValueByKey(String key){
        return CacheUtil.get(CacheConstants.SYS_CONFIG_KEY,key);
    }
}
